/*
Copyright (c) 2025 HeZongLun
NahidaProject is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan
PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/

#pragma once

#ifdef _WIN32
#define ExportSymbol  __declspec(dllexport)
#else
#define ExportSymbol
#endif

#include <string>
#include "JSON.h"

namespace NahidaProject {

	class ExportSymbol JSONParser{
	public:
		JSONParser();
		~JSONParser();

		void LoadFile(const std::string & str);
	    NahidaProject::JSON Parse();

	private:
		void SkipWhiteSpace();
		char GetNextToken();

		NahidaProject::JSON ParseNull();
		NahidaProject::JSON ParseBool();
		NahidaProject::JSON ParseNumber();
		std::string ParseString();
		NahidaProject::JSON ParseArray();
		NahidaProject::JSON ParseObject();

		bool InRange(int x, int lower, int upper){
			return (x >= lower && x <= upper);
		}

	private:
		std::string targetString;
		size_t m_idx;
	};

}
